using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SIOGDE.AccesoDatos.Contratos
{
   public class DataFactory
   {
   #region Constructor
   static DataFactory instance = null;
   public static DataFactory Current
   {
   get
   {
       if (instance == null)
           instance = new DataFactory();
       return instance;
   }
   }
   public T GetInstance<T>(string className)
   {
     return Create<T>("SIOGDE.AccesoDatos.Contexto."+className+",SIOGDE.AccesoDatos.Contexto");
   }
   public static T Create<T>(string classFullName)
   {
       var result = (T)Didsoft.Core.Reflection.InstanciateObjectFromAssembly(classFullName);
       if (result == null)
           throw new NullReferenceException("cannot create instance of type "+classFullName);
       return result;
   }
   #endregion
   public IArmaAccesoDatos GetArmaAccesoDatos()
   {
       return this.GetInstance<IArmaAccesoDatos>("ArmaAccesoDatos");
   }
   public ICategoriaUnidadAccesoDatos GetCategoriaUnidadAccesoDatos()
   {
       return this.GetInstance<ICategoriaUnidadAccesoDatos>("CategoriaUnidadAccesoDatos");
   }
   public IComandoAccesoDatos GetComandoAccesoDatos()
   {
       return this.GetInstance<IComandoAccesoDatos>("ComandoAccesoDatos");
   }
   public IDestinoAsignadoAccesoDatos GetDestinoAsignadoAccesoDatos()
   {
       return this.GetInstance<IDestinoAsignadoAccesoDatos>("DestinoAsignadoAccesoDatos");
   }
  
   public IEspecialidadAccesoDatos GetEspecialidadAccesoDatos()
   {
       return this.GetInstance<IEspecialidadAccesoDatos>("EspecialidadAccesoDatos");
   }
   public IEvaluacionDestinoAccesoDatos GetEvaluacionDestinoAccesoDatos()
   {
       return this.GetInstance<IEvaluacionDestinoAccesoDatos>("EvaluacionDestinoAccesoDatos");
   }
   public IFuerzaAccesoDatos GetFuerzaAccesoDatos()
   {
       return this.GetInstance<IFuerzaAccesoDatos>("FuerzaAccesoDatos");
   }
   public IGestionAccesoDatos GetGestionAccesoDatos()
   {
       return this.GetInstance<IGestionAccesoDatos>("GestionAccesoDatos");
   }
   public IGradoAccesoDatos GetGradoAccesoDatos()
   {
       return this.GetInstance<IGradoAccesoDatos>("GradoAccesoDatos");
   }
   
   public IHistorialAntecedenteAccesoDatos GetHistorialAntecedenteAccesoDatos()
   {
       return this.GetInstance<IHistorialAntecedenteAccesoDatos>("HistorialAntecedenteAccesoDatos");
   }
   public IHistorialAscensoAccesoDatos GetHistorialAscensoAccesoDatos()
   {
       return this.GetInstance<IHistorialAscensoAccesoDatos>("HistorialAscensoAccesoDatos");
   }
   public IHistorialEspecialidadAccesoDatos GetHistorialEspecialidadAccesoDatos()
   {
       return this.GetInstance<IHistorialEspecialidadAccesoDatos>("HistorialEspecialidadAccesoDatos");
   }
   public IMediaAccesoDatos GetMediaAccesoDatos()
   {
       return this.GetInstance<IMediaAccesoDatos>("MediaAccesoDatos");
   }
   public IPersonaAccesoDatos GetPersonaAccesoDatos()
   {
       return this.GetInstance<IPersonaAccesoDatos>("PersonaAccesoDatos");
   }
   public IRegionUnidadAccesoDatos GetRegionUnidadAccesoDatos()
   {
       return this.GetInstance<IRegionUnidadAccesoDatos>("RegionUnidadAccesoDatos");
   }
   public IRequerimientoConfigAccesoDatos GetRequerimientoConfigAccesoDatos()
   {
       return this.GetInstance<IRequerimientoConfigAccesoDatos>("RequerimientoConfigAccesoDatos");
   }
   public ITipoCargoComandoAccesoDatos GetTipoCargoComandoAccesoDatos()
   {
       return this.GetInstance<ITipoCargoComandoAccesoDatos>("TipoCargoComandoAccesoDatos");
   }
   public ITipoUnidadAccesoDatos GetTipoUnidadAccesoDatos()
   {
       return this.GetInstance<ITipoUnidadAccesoDatos>("TipoUnidadAccesoDatos");
   }
   public IUnidadMilitarAccesoDatos GetUnidadMilitarAccesoDatos()
   {
       return this.GetInstance<IUnidadMilitarAccesoDatos>("UnidadMilitarAccesoDatos");
   }
   public IPersonaArmaAccesoDatos GetPersonaArmaAccesoDatos()
   {
       return this.GetInstance<IPersonaArmaAccesoDatos>("PersonaArmaAccesoDatos");
   }

   public ISmtpConfigAccesoDatos GetSmtpConfigAccesoDatos()
   {
       return this.GetInstance<ISmtpConfigAccesoDatos>("SmtpConfigAccesoDatos");
   }

   }
}

